import Joi from 'joi';

// 支持的编程语言
const SUPPORTED_LANGUAGES = [
  'javascript',
  'typescript',
  'python',
  'java',
  'go',
  'rust',
  'ruby',
  'cpp',
  'csharp',
  'php'
];

// 代码执行请求验证模式
const executeRequestSchema = Joi.object({
  language: Joi.string()
    .valid(...SUPPORTED_LANGUAGES)
    .required()
    .messages({
      'string.empty': '语言不能为空',
      'any.required': '必须指定语言',
      'any.only': `语言必须是以下之一：${SUPPORTED_LANGUAGES.join(', ')}`
    }),
  
  code: Joi.string()
    .required()
    .max(50000) // 限制代码长度
    .messages({
      'string.empty': '代码不能为空',
      'any.required': '必须提供代码',
      'string.max': '代码长度超过限制'
    }),
  
  input: Joi.string()
    .allow('')
    .max(5000)
    .default('')
    .messages({
      'string.max': '输入长度超过限制'
    }),
  
  timeout: Joi.number()
    .integer()
    .min(1000)
    .max(30000) // 1-30秒
    .default(10000)
    .messages({
      'number.base': '超时必须是数字',
      'number.min': '超时必须至少为1000毫秒',
      'number.max': '超时不能超过30000毫秒'
    })
});

/**
 * 验证代码执行请求
 * @param data 请求数据
 * @returns 验证结果
 */
export const validateExecuteRequest = (data: unknown) => {
  return executeRequestSchema.validate(data, {
    abortEarly: false,
    stripUnknown: true,
    convert: true
  });
}; 